package com.donleo.job;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author liangd
 * @since 2021-03-03 18:45
 */
@SpringBootApplication
public class JobApp {
    public static void main(String[] args) {
        SpringApplication.run(JobApp.class, args);
    }
    /*
        一、场景引入
        java本身和第三方开源框架Spring共有三种执行定时任务的方式：
        1) Java自带的java.util.Timer类：这个类允许你调度一个java.util.TimerTask任务。(这种方式比较古老，自从第三方开源框架出现以来，
           基本不使用java自带的定时任务组件)
        2) 开源的第三方框架： Quartz 或者 elastic-job ， 但是这个比较复杂和重量级，适用于分布式场景下的定时任务，可以根据需要多实例部署定时任务。
        3) 使用Spring提供的注解： @Schedule 。 如果定时任务执行时间较短，并且比较单一，可以使用这个注解。

        以上三种执行定时任务的方式都只能固定执行周期，一旦定时任务跑起来之后就不可能修改周期，只能修改周期后重新启动，现在需要动态修改执行周期，
        故这三种方式都不能使用。

        二、解决方式
        既然不能用通过传统的方式，那就要想到强大的第三方开源框架带来的便利，Spring从3.0版本开始在框架中加入了一个新的定时任务线程池配置类，即：
        org.springframework.scheduling.concurrent包中有一个
        ThreadPoolTaskScheduler类，它继承了抽象类ExecutorConfigurationSupport 并实现了AsyncListenableTaskExecutor， SchedulingTaskExecutor，
        TaskScheduler三个接口 ，其中实现了TaskScheduler中的一个方法：ScheduledFuture> schedule(Runnable task, Trigger trigger)
     */
}
